package top.zhangjianyong.blog.entity.po;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import top.zhangjianyong.blog.record.GeoIP2Info;

/**
 * IP信息实体类
 * 用于缓存IP地址对应的GeoIP2归属地信息，避免重复查询
 *
 * @author zhangjianyong
 * @since 2025/1/26
 */
@Getter
@Setter
@TableName("ip_info")
public class IpInfo extends BaseEntity {

    /** IP地址 */
    private String ip;

    // ========== GeoIP2 IP归属地信息 ==========

    /** ASN号：自治系统编号，用于标识网络运营商 */
    private Long asn;

    /** 组织名称：网络运营商或组织的名称 */
    private String organization;

    /** 国家：IP所属国家 */
    private String country;

    /** 省份/州：IP所属省份或州 */
    private String subdivision;

    /** 城市：IP所属城市 */
    private String city;

    /** 纬度：地理位置纬度坐标 */
    private Double latitude;

    /** 经度：地理位置经度坐标 */
    private Double longitude;

    /** 时区：当地时区信息 */
    private String timeZone;

    /** IP版本：IPv4或IPv6 */
    private String ipVersion;

    /** 查询次数：记录该IP被查询的次数 */
    private Integer queryCount;

    /** 最后查询时间：记录该IP最后一次被查询的时间 */
    private java.time.LocalDateTime lastQueryTime;

    /**
     * 设置GeoIP2信息
     *
     * @param geoIP2Info GeoIP2信息对象
     */
    public void setGeoIP2Info(GeoIP2Info geoIP2Info) {
        if (geoIP2Info != null) {
            this.asn = geoIP2Info.asn();
            this.organization = geoIP2Info.organization();
            this.country = geoIP2Info.country();
            this.subdivision = geoIP2Info.subdivision();
            this.city = geoIP2Info.city();
            this.latitude = geoIP2Info.latitude();
            this.longitude = geoIP2Info.longitude();
            this.timeZone = geoIP2Info.timeZone();
            this.ipVersion = geoIP2Info.ipVersion();
        }
    }

} 